package com.smart.community.region.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.smart.community.region.entity.Shop;
import com.smart.community.region.vo.ShopVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 店铺信息Mapper接口
 * 
 * @author Wu.Liang
 * @version 1.0.0
 * @since 2025-09-30
 */
public interface ShopMapper extends BaseMapper<Shop> {
    
    /**
     * 分页查询店铺列表
     * 遵循《Java后端SpringBoot代码开发规范_重构版.md》Mapper层规范
     * 遵循《系统状态枚举权威标准声明.md》状态枚举规范
     * 
     * @param page 分页参数
     * @param communityId 社区ID
     * @param shopType 店铺类型
     * @param shopName 店铺名称
     * @param shopCode 店铺编码
     * @param buildingId 楼栋ID
     * @param unitId 单元ID
     * @param roomNumber 房间号
     * @param contactPerson 联系人
     * @param contactPhone 联系电话
     * @param status 状态
     * @param minArea 最小面积
     * @param maxArea 最大面积
     * @param minRentPrice 最小租金
     * @param maxRentPrice 最大租金
     * @return 分页结果
     */
    IPage<ShopVO> selectShopPage(Page<ShopVO> page, 
                                 @Param("communityId") Long communityId,
                                 @Param("shopType") Integer shopType,
                                 @Param("shopName") String shopName,
                                 @Param("shopCode") String shopCode,
                                 @Param("buildingId") Long buildingId,
                                 @Param("unitId") Long unitId,
                                 @Param("roomNumber") String roomNumber,
                                 @Param("contactPerson") String contactPerson,
                                 @Param("contactPhone") String contactPhone,
                                 @Param("status") Integer status,
                                 @Param("minArea") java.math.BigDecimal minArea,
                                 @Param("maxArea") java.math.BigDecimal maxArea,
                                 @Param("minRentPrice") java.math.BigDecimal minRentPrice,
                                 @Param("maxRentPrice") java.math.BigDecimal maxRentPrice);
    
    /**
     * 根据社区ID查询店铺列表
     * 
     * @param communityId 社区ID
     * @return 店铺列表
     */
    List<Shop> selectShopListByCommunityId(@Param("communityId") Long communityId);
    
    /**
     * 根据店铺类型查询店铺列表
     * 
     * @param shopType 店铺类型
     * @return 店铺列表
     */
    List<Shop> selectShopListByType(@Param("shopType") Integer shopType);
    
    /**
     * 根据店铺编码查询店铺信息
     * 
     * @param shopCode 店铺编码
     * @return 店铺信息
     */
    Shop selectShopByCode(@Param("shopCode") String shopCode);
    
    /**
     * 根据楼栋ID查询店铺列表
     * 
     * @param buildingId 楼栋ID
     * @return 店铺列表
     */
    List<Shop> selectShopListByBuildingId(@Param("buildingId") Long buildingId);
    
    /**
     * 根据单元ID查询店铺列表
     * 
     * @param unitId 单元ID
     * @return 店铺列表
     */
    List<Shop> selectShopListByUnitId(@Param("unitId") Long unitId);
    
    /**
     * 统计店铺数量
     * 
     * @param communityId 社区ID
     * @param shopType 店铺类型
     * @return 店铺数量
     */
    Integer countShops(@Param("communityId") Long communityId, 
                      @Param("shopType") Integer shopType);
    
    /**
     * 检查店铺编码是否存在
     * 
     * @param shopCode 店铺编码
     * @param excludeId 排除的店铺ID
     * @return 是否存在
     */
    Boolean existsByShopCode(@Param("shopCode") String shopCode, 
                             @Param("excludeId") Long excludeId);
}
